<template>
  <div class="login">
    <section class="form-container">
      <div class="manager-tip">
        <span class="title">无痕在线管理系统</span>
        <el-form :model="loginUser" :rules="rules" status-icon ref="loginForm" label-width="60px" class="loginForm">
          <el-form-item label="邮箱" prop="email">
            <el-input v-model="loginUser.email" placeholder="请输入邮箱"></el-input>
          </el-form-item>
          <el-form-item label="密码" prop="password">
            <el-input type="password" v-model="loginUser.password" placeholder="请输入密码"></el-input>
          </el-form-item>

          <el-form-item>
            <el-button type="primary" class="sumbit-btn" @click="sumbitForm('loginForm')">登录</el-button>
          </el-form-item>

            <div class="register-tip">
              <p>
                还没有账号？点击这里马上
                <router-link to="/register">注册</router-link>
              </p>
            </div>
        </el-form>
      </div>
    </section>
  </div>
</template>

<script>
  import jwt_decode from 'jwt-decode';
  import { login } from "../utils/api";

  export default {
    name: "login",
    data(){
      return {
        loginUser: {
          email: '',
          password: ''
        },
        rules: {
          email: [
            {
              type: 'email',
              required: true,
              message: '邮箱格式不正确',
              trigger: 'blur'
            }
          ],
          password: [
            {
              required: true,
              message: '密码不能为空',
              trigger: 'blur'
            },
            {
              min: 6,
              max: 30,
              message: '长度在6到30字符之间',
              trigger: 'blur'
            }
          ]
        }
      }
    },
    methods: {
      sumbitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if(valid){
            login(this.loginUser)
              .then(data => {
                // console.log(data);
                const token = data.info.token;
                const avatar = data.info.avatar;
                //存储token到本地
                localStorage.setItem('wuhenToken', token);
                //解析token
                const decoded = jwt_decode(token);
                // console.log(decoded);
                //token存储到vuex中
                this.$store.dispatch("setAuthenticated", !this.isEmpty(decoded));
                this.$store.dispatch("setUser", decoded);

                //头像储存：
                localStorage.setItem('avatar', avatar);
                this.$store.dispatch("setAvatar", avatar);

                this.$router.push('/index');
              })
              .catch(err => console.log(err));
          }
        });
      },
      isEmpty(value) {
        return (
          value === undefined || value ===null ||
          (typeof value === "object" && Object.keys(value).length === 0) ||
          (typeof value === "string" && value.trim().length === 0)
        );
      }
    }

  }
</script>

<style scoped>
  .login{
    position: relative;
    width: 100%;
    height: 100%;
    background: url("./../assets/bg.jpg");
    background-size: 100% 100%;
  }
  .form-container{
    width: 370px;
    height: 210px;
    position: absolute;
    top: 10%;
    left: 50%;
    transform: translateX(-185px);
    padding: 25px;
    border-radius: 5px;
    text-align: center;
  }
  .form-container .manager-tip .title{
    font-family: 'Microsoft YaHei';
    font-weight: bold;
    font-size: 26px;
    color: #fff;
  }
  .loginForm{
    margin-top: 20px;
    background-color: #fff;
    padding: 20px 40px 20px 20px;
    border-radius: 5px;
    box-shadow: 0px 5px 10px #ccc;
  }
  .sumbit-btn{
    width: 100%;
  }
  .register-tip{
    color: #666;
    font-size: 12px;
    margin-bottom: 40px;
    margin-top: 30px;
    position: relative;
  }
  .register-tip>p{
    position: absolute;
    right: 0;
  }
  .register-tip>p>a{
    text-decoration: none;
    font-weight: bold;
  }
</style>